跳到主要内容

01 芯片介绍

up的视频讲解

从一颗芯片出发,认识处理器、存储器和外设,再理解程序如何在它们之间运行。

1 芯片里有什么​

微控制器把一个小型计算机所需的主要部件集成在一颗芯片中。课程使用的 STM32F103C8T6,可以先按三个部分理解:负责执行程序的内核、存放程序与数据的存储器,以及连接外部设备的外设。

先辨认内核、Flash、SRAM与外设,再沿总线观察它们的连接。
先辨认内核、Flash、SRAM与外设,再沿总线观察它们的连接。

图中用系列框图说明连接关系,包含其他型号的外设。课程所用 C8T6 的具体资源按下表理解,不能把框图里所有外设都视为本芯片具备。

部分在程序中承担的工作
Cortex-M3 内核读取指令,完成计算,控制程序执行顺序
64 KB Flash保存下载的程序和常量,断电后仍然保留
20 KB SRAM保存运行过程中需要读写的数据,断电后不保留
GPIO、定时器、通信等外设处理引脚电平、计时、数据收发等具体工作

CPU 可以进一步理解为控制与运算两部分:控制单元决定下一步做什么,运算单元完成相应的计算。外设则把重复的硬件工作分担出去,不必让 CPU 逐个电平地处理所有事情。

2 指令与数据怎样连接​

两种架构的区别​

冯·诺依曼架构让指令与数据共用存储空间和通路;哈佛架构为它们设置独立的存储空间和通路。前者强调统一访问,后者方便同时取指令和访问数据。

比较的重点是“指令与数据是否共用通路”,不是图形的位置。
比较的重点是“指令与数据是否共用通路”,不是图形的位置。

STM32 使用的 Cortex-M3 采用改良的哈佛架构。程序指令可以放在 Flash 中,一些只读常量也可以放在那里;运行中的变量主要使用 SRAM。理解这一点,就能把代码里的常量、变量与实际存储空间联系起来。

总线把各部分连接起来​

从内核出发,跟随 ICode、DCode 和 System 通路找到各类存储器与外设。
从内核出发,跟随 ICode、DCode 和 System 通路找到各类存储器与外设。

总线是内部传输地址与数据的通路。总线矩阵连接多个访问者和目标;AHB 与 APB 则把不同外设组织到相应的总线上。后面配置 GPIO、定时器时所说的“开启外设时钟”,就会与这些连接对应起来。

3 程序怎样进入芯片并启动​

下载:把程序写入 Flash​

课程通过 ST-Link 连接开发板的 SWD 接口。SWDIO 负责数据,SWCLK 负责时钟;开发板上的 SWD、SWC 标识对应这两条信号。

下载器连接到调试接口,程序最终写入芯片的 Flash。
下载器连接到调试接口,程序最终写入芯片的 Flash。

启动:决定从哪里开始运行​

芯片复位后,根据启动配置选择启动存储区域。正常运行课程程序时,从用户 Flash 启动;系统存储器中的引导程序则用于另一类下载流程。

区分用户程序所在的 Flash 与芯片预置引导程序所在的系统存储器。
区分用户程序所在的 Flash 与芯片预置引导程序所在的系统存储器。

程序运行时,程序计数器 PC 跟踪接下来执行的指令。顺序执行时向后推进,遇到跳转、函数调用或中断时,执行位置发生变化。

4 用地址访问存储器与外设​

地址像一个编号:CPU 先给出地址,再读取或写入对应位置。32 位地址可以表达 2³² 个不同地址;在按字节寻址的空间中,对应 4 GB 的地址范围。地址范围并不等于芯片实际装有 4 GB 存储器。

地址空间划分出不同区域,实际实现的容量由具体芯片决定。
地址空间划分出不同区域,实际实现的容量由具体芯片决定。

程序指令、常量、变量,以及外设寄存器,都能在地址空间中找到相应的位置。后面调用库函数配置外设,本质上仍是对相关寄存器进行访问。